﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using WebPic.Sample.Comum;

namespace WebPic.Sample.Modelo.Entidades
{
    [Table("PlanoContas")]
    public abstract class PlanoConta : EntidadeBase
    {
        [Display(Name = "Plano de contas pai")]
        public Guid? IdPlanoContaPai { get; set; }

        [Required]
        [StringLength(100)]
        [Display(Name = "Descrição")]
        public string Descricao { get; set; }

        [Required]
        [StringLength(15)]
        public string Hierarquia { get; set; }

        public PlanoConta PlanoContaPai { get; set; }

        public ICollection<Vendedor> Vendedores { get; set; }

        public ICollection<Fornecedor> Fornecedores { get; set; }

        /// <summary>
        /// Separador do nível de hierarquia.
        /// </summary>
        private const char Separador = '.';

        /// <summary>
        /// Gera o próximo nível da hierarquia passada no <param name="nivel"></param>
        /// </summary>
        /// <param name="nivel">Nível do plano de conta.</param>
        public static string ObterProximoNivelHierarquia(string nivel)
        {
            nivel = nivel ?? string.Empty;

            var digitos = nivel.Split(Separador);

            if (digitos.Length == 1)
            {
                return Convert.ToString(nivel.AsByte() + 1);
            }

            var ultimoDigitoSomado = digitos.LastOrDefault().AsByte() + 1;

            return string.Concat(
                nivel.Substring(0, nivel.LastIndexOf(Separador)), Separador,
                ultimoDigitoSomado
                );
        }
    }
}